import router from './router'
import store from './store'
import getPageTitle from '@/utils/get-page-title'
import wechatAuth from './plugins/wechatAuth' // 微信登录插件
import cookies from 'js-cookie'
import {
  getJssdkConfig
} from '@/api/user'
import wx from 'weixin-js-sdk';
import {
  Toast
} from 'vant'
const qs = require('qs')


// 获取真实有效微信签名URL
// function getWechatSignUrl(to) {
//   const u = navigator.userAgent,
//     isIos = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
//   if (isIos) {
//     return window.location.href;
//   } else {
//     // 此处$appHost需要自行处理
//     return $appHost + to.fullPath
//   }
// }

router.beforeEach((to, from, next) => {
  const loginStatus = Number(store.getters.loginStatus)
  // console.log('loginStatus=' + loginStatus)
  // console.log('token=' + store.getters.token)



  

  var entryUrl = window.location.href.split('?')[0]
  store.commit("app/setWechatSignUrl", entryUrl);


  // 页面标题
  document.title = getPageTitle(to.meta.title)
  if (loginStatus === 0) {
    // 微信未授权登录跳转到授权登录页面
    const url = window.location.href
    // 解决重复登录url添加重复的code与state问题
    const parseUrl = qs.parse(url.split('?')[1])
    let loginUrl
    if (parseUrl.code && parseUrl.state) {
      delete parseUrl.code
      delete parseUrl.state
      loginUrl = `${url.split('?')[0]}?${qs.stringify(parseUrl)}`
    } else {
      loginUrl = url
    }
    // 设置微信授权回调地址
    wechatAuth.redirect_uri = loginUrl
    // 无论拒绝还是授权都设置成1
    store.dispatch('user/setLoginStatus', 1)
    // 跳转到微信授权页面
    window.location.href = wechatAuth.authUrl
  } else if (loginStatus === 1) {
    // 用户已授权，获取code
    try {
      // 通过回调链接设置code status
      wechatAuth.returnFromWechat(to.fullPath)
    } catch (err) {
      // 失败，设置状态未登录，刷新页面
      store.dispatch('user/setLoginStatus', 0)
      location.reload()
    }
    // 同意授权 to.fullPath 携带code参数，拒绝授权没有code参数
    const code = wechatAuth.code
    if (code) {
      // 拿到code 访问服务端的登录接口
      store
        .dispatch('user/loginWechatAuth', code)
        .then(res => {
          return store.dispatch('user/getUserAllInfo')
        })
        .then(res => {
          // 成功设置已登录状态
          store.dispatch('user/setLoginStatus', 2)

          const url = window.location.href;
          const parseUrl = qs.parse(url.split('?')[1])
          delete parseUrl.code
          delete parseUrl.state
          qs.stringify(parseUrl)

          var hasParse = JSON.stringify(qs) === '{}';
          const newUrl = `${url.split('?')[0]}${ hasParse ? `?${qs.stringify(parseUrl)}` : '' }`
          // next()
          location.assign(newUrl);
        })
        .catch(err => {
          // 失败，设置状态未登录，刷新页面
          store.dispatch('user/setLoginStatus', 0)
          Toast({
            type: 'fail',
            message: '授权失败',
            mask: true,
            onClose: () => {
              store.dispatch('user/fedLogOut').then(() => {
                location.reload()
              })
            }
          })

        })
    } else {
      store.dispatch('user/setLoginStatus', 0)
      location.reload()
    }
  } else {
    // ios微信jssdk兼容性处理
    // const u = navigator.userAgent,
    //   isIos = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
    // const url = isIos ? store.getters['getWechatSignUrl'] : window.location.href;
    // alert(u)
    // alert(isIos)
    // alert(url)
    // getJssdkConfig({
    //   url
    // }).then(res => {
    //   const {
    //     appId,
    //     nonceStr,
    //     signature,
    //     timestamp
    //   } = res.data.jsapiSignature;
    //   // console.log({
    //   //   appId,
    //   //   nonceStr,
    //   //   signature,
    //   //   timestamp
    //   // })
    //   wx.config({
    //     debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
    //     appId, // 必填，公众号的唯一标识
    //     timestamp, // 必填，生成签名的时间戳
    //     nonceStr, // 必填，生成签名的随机串
    //     signature, // 必填，签名
    //     jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData'] // 必填，需要使用的JS接口列表
    //   });



    // })

    store.dispatch('user/getUserAllInfo')
    next()

  }


  // store.dispatch('user/getUserAllInfo')
  // next()
})


router.afterEach((to, from) => {
  // ios微信jssdk兼容性处理
  const u = navigator.userAgent,
    isIos = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
  const url = isIos ? store.getters['getWechatSignUrl'] : `https://${window.location.host}${to.fullPath}`;
  getJssdkConfig({
    url
  }).then(res => {
    const {
      appId,
      nonceStr,
      signature,
      timestamp
    } = res.data.jsapiSignature;
    // console.log({
    //   appId,
    //   nonceStr,
    //   signature,
    //   timestamp
    // })
    wx.config({
      debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
      appId, // 必填，公众号的唯一标识
      timestamp, // 必填，生成签名的时间戳
      nonceStr, // 必填，生成签名的随机串
      signature, // 必填，签名
      jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData', 'onMenuShareAppMessage', 'onMenuShareTimeline'] // 必填，需要使用的JS接口列表
    });
  })
})
